# -*- coding: utf-8 -*-
# @Time         : 9:59 2025/2/26
# @Author       : Chris
# @Description  :
from typing import Literal

from pydantic import BaseModel, Field

from .product import ProductType, ProductStatus
from .._models import NickedIntEnum


class PublishStatus(NickedIntEnum):
    INVALID = (-1, "不可操作")
    """不可操作（不可上架/编辑）"""

    DRAFT = (1, "草稿箱")
    """草稿箱（可编辑/删除）"""

    PENDING_PUBLISH = (2, "待发布")
    """待发布（可上架/编辑/删除）"""

    SELLING = (3, "销售中")
    """销售中（可下架/编辑）"""

    OFFLINE = (4, "已下架")
    """已下架（可上架/编辑/删除）"""

    SOLD_OUT = (5, "已售罄")
    """已售罄（可上架/编辑/删除）"""

    EXCEPTION = (9, "商品异常")
    """商品异常（可编辑/删除）"""


class TaskType(NickedIntEnum):
    UPLOAD_NEW = (10, "上架新商品")
    """上架新商品"""

    UPLOAD_EXISTING = (11, "上架存量商品")
    """上架存量商品"""

    EDIT_ON_SHELF = (13, "编辑在架商品")
    """编辑在架商品"""


class TaskResult(NickedIntEnum):
    SUCCESS = (1, "执行成功")
    """执行成功"""

    FAILURE = (2, "执行失败")
    """执行失败"""


class ProductPublishResult(BaseModel):
    seller_id: int
    """商家ID（必需）"""

    product_id: int
    """管家商品ID（必需）"""

    product_status: ProductStatus = Field(default=ProductStatus.DEFAULT)
    """商品状态（必需）"""
    # 枚举值：-1 : 已删除 21 : 待发布 22 : 销售中 23 : 已售罄 31 : 手动下架 33 : 售出下架 36 : 自动下架
    # 默认值: 0

    publish_status: PublishStatus
    """发布状态（必需）"""
    # 枚举值：-1：不可操作（不可上架/编辑） 1：草稿箱（可编辑/删除） 2：待发布（可上架/编辑/删除） 3：销售中（可下架/编辑） 4：已下架（可上架/编辑/删除） 5：已售罄（可上架/编辑/删除） 9：商品异常（可编辑/删除）
    # 示例值: 2

    item_biz_type: ProductType
    """商品类型（必需）"""
    # 枚举值：2 : 普通商品 0 : 已验货 10 : 验货宝 16 : 品牌授权 19 : 闲鱼严选 24: 闲鱼特卖 26: 品牌捡漏
    # 示例值: 2

    user_name: str
    """闲鱼会员名（必需）"""

    item_id: int = None
    """闲鱼商品ID（可选）"""

    task_type: TaskType
    """任务类型（必需）"""
    # 枚举值：10 : 上架新商品 11 : 上架存量商品 13 : 编辑在架商品

    task_time: int
    """任务执行时间（必需）"""

    task_result: TaskResult
    """任务执行结果（必需）"""
    # 枚举值：1 : 执行成功 2 : 执行失败

    err_code: str = None
    """错误码（可选）"""

    err_msg: str = None
    """错误描述（可选）"""


class ProductPublishCallbackResponse:
    """推送成功响应报文"""
    msg: str
    """描述"""

    result: Literal["success"]
    """结果"""
